package com.mzy.basics.serializable.jsontoolclass;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.testng.annotations.Test;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @author Ives
 * * @date 2021/11/22
 */
public class FastJson {
  /**
   * FastJson处理json对象和java对象
   * fastjson是阿里巴巴的开源JSON解析库，它可以解析JSON格式的字符串，
   * 支持将Java Bean序列化为JSON字符串，也可以从JSON字符串反序列化到JavaBean。
   */

  @Test
  public void test(){
    String json ="{\"createTime\":1621341922450,\"id\":1,\"name\":\"DT\"}";

    // 方式1: 将json字符串转为Java对象
    Person person = JSON.parseObject(json, Person.class);
    System.out.println("java对象-》" + person);
    System.out.println("========================");

    // 方式2: 将json字符串转为Java对象
    Person person1 = JSONObject.parseObject(json, Person.class);
    System.out.println("java对象02"+person1);

  }


  /**
   * 将Java对象转换为JSON 字符串
   */
  @Test
  public void test2(){
    /**
     * 可以格式化
     */
    Person person = new Person(1,"DT",new Date());
    // 方式1：将对象转换为json字符串
    String jsonString = JSON.toJSONString(person,true);
    System.out.println("java字符串》》"+jsonString);

    // 方式2：将对象转为json字符串
    String json2 = JSONObject.toJSONString(person);
    System.out.println("json字符串->>>"+json2);

  }

  /**
   * 将JSON 字符串数组转为JSON数组
   */
  @Test
  public void test3(){
    ArrayList<Person> personList = new ArrayList<>();

    personList.add(new Person(1,"DT",new Date()));
    personList.add(new Person(2,"DT1",new Date()));
    personList.add(new Person(3,"DT2",new Date()));

    String jsonString = JSONObject.toJSONString(personList);
    JSONArray objects = JSONObject.parseArray(jsonString);
    System.out.println(objects);
    System.out.println(jsonString);

    // json字符串 转对象数组,**后面新增
    List<Person> personLists = JSONObject.parseArray(jsonString, Person.class);
    personLists.forEach(e -> System.out.println(e));

  }

  /**
   * 将JSON数组转为JSON 字符串
   */
  @Test
  public void test4(){

    /**
     * 可以格式化
     */
    List<Person> personList = new ArrayList<>();
    personList.add(new Person(1,"DT",new Date()));
    personList.add(new Person(2,"DT1",new Date()));
    personList.add(new Person(3,"DT2",new Date()));
    String json = JSONObject.toJSONString(personList,true);
    System.out.println("json->>>"+json);

  }


}
